module onehot_unit_l1(
input  i0,i1,i2,
output is_onehot ,// 1 means already has onehot, so the others must be 0
output not_onehot // 1 means 100% not onehot, noneed to check others
);
wire i0_inv;        not u_i0_inv (i0_inv,i0);
wire i0_and;  and u_i0_and (i0_and,i0_inv,i1);
wire i1_inv;        not u_i1_inv (i1_inv,i1);
wire i1_and;  and u_i1_and (i1_and,i1_inv,i0);
or u_is_onehot(is_onehot,i0_and,i1_and);
and u_not_onehot(not_onehot,i0,i1);
endmodule
module onehot_unit(
input    i00 , i01, i02, i10 , i11 , i12, i20, i21 i22,
output   is_onehot     ,// 1 means already has onehot, so the others must be 0
output   not_onehot     // 1 means 100% not onehot, noneed to check others
);
wire i0, err0; wire i1, err1; wire i2, err2; wire s_onehot; wire s_nothot; 
wire has_err = err0 | err1 | err2 ;
wire not_has_err =  ~has_err;
assign is_onehot  = s_onehot & not_has_err;
assign not_onehot = s_nothot &     has_err;
onehot_unit_l1 U_L10( .i0(i00), .i1(i01),.i2(i02),.is_onehot(i0),.not_onehot(err0   )); 
onehot_unit_l1 U_L11( .i0(i10), .i1(i11),.i2(i12),.is_onehot(i1),.not_onehot(err1   )); 
onehot_unit_l1 U_L12( .i0(i20), .i1(i21),.i2(i22),.is_onehot(i2),.not_onehot(err2   )); 
endmodule
